﻿<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      'use strict';
      let arr = [2, 2, null, undefined, NaN, 'a'];
      let obj = {
        name: 'tom',
        age: 121,
        son: { name: 'tom', age: 122, son: { name: 'tom', age: 122 } },
      };
      arr.forEach((item) => {
        console.log(item);
      });
      console.log('foreach=');
      arr.forEach(function (item, index, array) {
        console.log(item + '=' + index);
      });

      for (let item of arr) {
        console.log(item);
      }
      console.log('----------');
      for (let i = 0; i < arr.length; i++) {
        console.log(arr[i]);
      }

      //in: 遍历index
      for (let idx in arr) {
        // typeof idx : 都是string
        // 注意: 若是数组, 则 hasOwnProperty可传递数字或者字符串,判断索引是否存在
        if (arr.hasOwnProperty(idx)) {
          console.log('存在:' + idx + ':' + arr[idx] + ' typeof:' + typeof idx);
        } else {
          console.log('不存在:' + idx + ' typeof:' + typeof idx);
        }
      }
      console.log('obj======for====');
      for (let idx in obj) {
        // typeof idx : 都是string
        // 注意: 若是数组, 则 hasOwnProperty可传递数字或者字符串,判断索引是否存在
        if (obj.hasOwnProperty(idx)) {
          console.log('存在:' + idx + ':' + obj[idx] + ' typeof:' + typeof idx);
        } else {
          console.log('不存在:' + idx + ' typeof:' + typeof idx);
        }
      }

      //for...in示例
      arr = [3, 4, 5];
      for (var x in arr) {
        console.log(x); //0,1,2
      }

      //for...of示例
      for (var x of arr) {
        console.log(x); //3,4,5
      }
      // 不支持:
      // for (let item : arr) {
      //   console.log(item);
      // }
    </script>
  </head>
  <body></body>
</html>
